/**
 * 映射接口响应数据的基类
 */
export interface BaseEntry {
  /** 创建者 */
  createBy: string
  /** 创建时间，使用string类型来模拟JSON中的日期格式 */
  createTime: string
  /** 更新者 */
  updateBy: string
  /** 更新时间 */
  updateTime: string
  /** 备注 */
  remark: string
}

/**
 * 响应信息主体
 */
export interface ApiResult<T = null> {
  code: number
  msg: string
  data?: T
}
export interface Result<T> {
  code: number
  msg: string
  data?: T
}
export interface Captcha extends ApiResult {
  captchaEnabled?: boolean
  img?: string
  uuid?: string
}

export interface UserProfile extends ApiResult {
  userName?: string
  nickName?: string
  phonenumber?: string
  sex?: string
  age?: string
  email?: string
  avatar?: string
  status?: string,
  country?: string,
  birthday?: string,
  createTime?: string
  roleGroup?: string
  postGroup?: string
}

export interface UserInfo extends ApiResult {
  token?: string
  user?: UserProfile
  roles?: Array<object>
  permissions?: Array<string>
}

export interface ProfileApiResult extends ApiResult {
  roleGroup?: string
  postGroup?: string
}

/**
 * 通用请求参数：pageNum、pageSize
 */
export interface QueryParam {
  pageNum: number
  pageSize: number
}

/**
 * 通用响应请求分页数据
 */
export interface PageData<T> {
  total: number
  rows: T[]
}

/**
 * 通用树形结构
 */
export interface TreeNode extends BaseEntry {
  id: string | number;
  parentId: string | number;  // 父Id
  children?: TreeNode[]; // 使用索引签名来表示任意数量的属性
  isExpand?: boolean // 是否展开
}